#ifndef _gameentity_h__
#define _gameentity_h__
#include "entity/entity.h"
#include "physics/physicsobject.h"
#include "math/vector.h"
#include "input/iinputmanager.h"

// game defined actions (need a way to bind these to input events too...)
enum GameActions
{
	MOVE_LEFT 		= 'movl',
	MOVE_RIGHT 		= 'movr',
	JUMP 			= 'jump',
	DUCK 			= 'duck',
	TURN_SHIP 		= 'turn',
	ZOOM			= 'zoom',
	FIRE 			= 'fire',
	THRUST 			= 'thrt',
	ENTER_EXIT_SHIP = 'exit',
};

enum MyGameAction
{
	MyGameAction_Thrust,
	MyGameAction_EnterExit,
	MyGameAction_TurnShip,
	MyGameAction_TurnShipLeft,
	MyGameAction_TurnShipRight,
	MyGameAction_Zoom,
	MyGameAction_ZoomIn,
	MyGameAction_ZoomOut,
	MyGameAction_WalkLeft,
	MyGameAction_WalkRight,
	MyGameAction_Walk,
};

enum MyGameActionContext
{
	MyGameActionContext_Ship,
	MyGameActionContext_Character,
};

class GameEntity : public gecko::Entity
{
public:
	// update the entity
	virtual UpdateReturn Update(float dt);

	// calculate gravity forces
	void AccumulateGravityForce(const GameEntity & other);

	void GetPosition(gecko::Vector3f & position);
	float GetAngle();

//protected:
	gecko::PhysicsObject * m_body;
	gecko::Vector3f m_bodyForces;
	float m_mass;
};

#endif // _gameentity_h__